// 高德地图组件类型定义

// 地图配置接口
export interface AMapConfig {
  key: string; // 高德地图API密钥
  version: string; // API版本
  plugins?: string[]; // 插件列表
}

// 地图初始化选项
export interface MapOptions {
  container: string | HTMLElement; // 地图容器
  center?: [number, number]; // 地图中心点 [经度, 纬度]
  zoom?: number; // 缩放级别
  mapStyle?: string; // 地图样式
  viewMode?: '2D' | '3D'; // 视图模式
  features?: string[]; // 地图功能
}

// 行政区域配置
export interface DistrictConfig {
  level: 'country' | 'province' | 'city' | 'district'; // 行政级别
  keyword: string; // 区域关键词
  subdistrict?: number; // 子级行政区
  extensions?: 'base' | 'all'; // 返回信息详细程度
}

// 区域样式配置
export interface DistrictStyle {
  strokeColor?: string; // 边界颜色
  strokeWeight?: number; // 边界宽度
  strokeOpacity?: number; // 边界透明度
  fillColor?: string; // 填充颜色
  fillOpacity?: number; // 填充透明度
  strokeStyle?: 'solid' | 'dashed'; // 边界样式
}

// 掩膜配置
export interface MaskConfig {
  selectedStyle: DistrictStyle; // 选中区域样式
  unselectedStyle: DistrictStyle; // 未选中区域样式
  enableMask: boolean; // 是否启用掩膜
}

// 道路显示配置
export interface RoadConfig {
  showRoads: boolean; // 是否显示道路
  roadTypes?: string[]; // 道路类型
  roadStyle?: {
    strokeColor?: string;
    strokeWeight?: number;
    strokeOpacity?: number;
  };
}

// 地图组件属性
export interface AMapComponentProps {
  mapConfig: AMapConfig;
  mapOptions?: Partial<MapOptions>;
  districtConfig?: DistrictConfig;
  maskConfig?: MaskConfig;
  roadConfig?: RoadConfig;
  onDistrictClick?: (district: any) => void; // 区域点击回调
  onMapReady?: (map: any) => void; // 地图就绪回调
}

// 行政区域数据
export interface DistrictData {
  adcode: string; // 行政区划代码
  name: string; // 名称
  level: string; // 级别
  center: [number, number]; // 中心点
  boundaries: [number, number][][]; // 边界坐标
  children?: DistrictData[]; // 子级区域
}

// 地图实例状态
export interface MapState {
  map: any | null; // 地图实例
  districtSearch: any | null; // 行政区搜索实例
  currentDistrict: DistrictData | null; // 当前选中区域
  districtPolygons: any[]; // 区域多边形
  isReady: boolean; // 地图是否就绪
  maskManager: any | null; // 掩膜管理器
  roadManager: any | null; // 道路管理器
}

// 事件类型
export interface MapEvents {
  'district-click': DistrictData;
  'map-ready': any;
  'district-change': DistrictData;
}